package top.z.work.module.system.convert;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import top.z.work.framework.common.pojo.PageInfo;
import top.z.work.module.system.controller.dept.vo.SystemDeptCreateVO;
import top.z.work.module.system.controller.dept.vo.SystemDeptModifyVO;
import top.z.work.module.system.controller.dept.vo.SystemDeptVO;
import top.z.work.module.system.entity.SystemDept;

import java.util.List;

@Mapper
public interface SystemDeptConvert {

    SystemDeptConvert INSTANCE = Mappers.getMapper(SystemDeptConvert.class);

    default QueryWrapper convert(SystemDeptVO config) {
        return QueryChain.of(SystemDept.class)
                .eq(SystemDept::getIdentity, config.getIdentity())
                .eq(SystemDept::getParent, config.getParent())
                .eq(SystemDept::getName, config.getName())
                .eq(SystemDept::getSort, config.getSort())
                ;
    }

    SystemDeptVO convert(SystemDept parameter);

    SystemDept convert(SystemDeptCreateVO vo);

    SystemDept convert(SystemDeptModifyVO vo);

    List<SystemDeptVO> convert(List<SystemDept> list);

    default PageInfo<SystemDeptVO> convert(Page<SystemDept> page) {
        List<SystemDeptVO>     list     = page.getRecords().stream().map(this::convert).toList();
        PageInfo<SystemDeptVO> pageInfo = new PageInfo<>();
        pageInfo.setList(list);
        pageInfo.setTotal(page.getTotalRow());
        pageInfo.setSize(page.getPageSize());
        pageInfo.setPage(page.getPageNumber());
        return pageInfo;
    }

}
